<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
    <script>
        //success对应done，error对应fail，complete对应always
        function runAsync1(){
            var def = $.Deferred();
            def.reject("88");
            //做一些异步操作
            setTimeout(function(){
                console.log('runAsync1执行完成');
                def.resolve('随便什么数据1');
            }, 3000);
            return def;
        }
        function runAsync2(data){
            var def = $.Deferred();
            //做一些异步操作
            setTimeout(function(){
                console.log('from',data);
                console.log('runAsync2执行完成');
                def.resolve('随便什么数据2');
            }, 1000);
            return def;
        }
        function runAsync3(data){
            var def = $.Deferred();
            //做一些异步操作
            setTimeout(function(){
                console.log('from',data);
                console.log('runAsync3执行完成');
                def.resolve('随便什么数据3');
            }, 1000);
            return def;
        }
        //1个接一个完成,按顺序
        // runAsync1().then(runAsync2).then(runAsync3).done(function(){
        //     console.log("有一个失败则不会到这");
        // }).fail(function(data){
        //    console.log("fail",data);
        // }).always(function(){
        //     console.log("一定会到这");
        // });

        //一起完成,不按顺序
        $.when(runAsync1(), runAsync2(), runAsync3()).done(function(){
            console.log("done");
        }).fail(function(){
            console.log("只要有一个失败就会fail");
        }).always(function(){
            console.log("一定会到这,而且不等前面的异步,主要看最后一个promise");
            return "a";
        });


        // runAsync().always(function(){
        //     console.log("first1");
        // }).then(function(data){
        //     console.log(data)
        //     setTimeout(function(){
        //         console.log('等等我');
        //     }, 2000);
        // }).always(function(){
        //     console.log("finish");
        // }).done(function(){
        //     console.log("done");
        // });

        // function aj1(){
        //     return $.ajax(
        //         {url:"/index.html",async:true,
        //         success:function(){
        //             console.log("ajax success");
        //         },
        //         error:function(){
        //             console.log("ajax error");
        //         },
        //         complete:function(){
        //             console.log("ajax compelete");
        //         }
        //     }
        //     );
        // }

        // aj1().done(function(){
        //     console.log("done");
        // }).fail(function(){
        //     console.log("fail");
        // });
        // aj1().done(runAsync1).done(runAsync2)
    </script>
</head>
<body>
    
</body>
</html>